package fr.blogger.ejb.service;

import java.util.Calendar;

import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.inject.Inject;

import fr.blogger.ejb.facade.ArticleFacade;
import fr.blogger.ejb.facade.BlogFacade;
import fr.blogger.ejb.facade.CommentaireFacade;
import fr.blogger.ejb.facade.NewsFacade;
import fr.blogger.ejb.facade.ProfilFacade;
import fr.blogger.ejb.facade.RoleFacade;
import fr.blogger.ejb.facade.UtilisateurFacade;
import fr.blogger.ejb.model.Article;
import fr.blogger.ejb.model.Blog;
import fr.blogger.ejb.model.Commentaire;
import fr.blogger.ejb.model.News;
import fr.blogger.ejb.model.Profil;
import fr.blogger.ejb.model.Role;
import fr.blogger.ejb.model.Utilisateur;
import fr.blogger.ejb.outils.UtilsAuthentication;

@Startup
@Singleton
public class StartupService {

	@Inject
	private UtilisateurFacade utilisateurFacade;
	@Inject
	private ProfilFacade profilFacade;
	@Inject
	private RoleFacade roleFacade;
	@Inject
	private NewsFacade newsFacade;
	@Inject
	private BlogFacade blogFacade;
	@Inject
	private ArticleFacade articleFacade;
	@Inject
	private CommentaireFacade commentaireFacade;

	public StartupService() {
	}

	@PostConstruct
	private void initialisation() {
//		 createDatas();
	}

	private void createDatas() {
		// CREATION DES OBJETS

		Calendar dateTime = Calendar.getInstance();

		dateTime.set(2014, 6, 13, 8, 32, 24);
		Utilisateur utilisateur1 = new Utilisateur();
		utilisateur1.setMail("laurent.parrot78@gmail.com");
		utilisateur1.setNom("PARROT");
		utilisateur1.setPrenom("Laurent");
		utilisateur1.setDateCreation(dateTime.getTime());
		utilisateur1.setPassword(UtilsAuthentication.chiffrerMotdepasse("parrot", utilisateur1.getDateCreation()));

		dateTime.set(2015, 0, 5, 11, 2, 35);
		Utilisateur utilisateur2 = new Utilisateur();
		utilisateur2.setMail("patesdegeek@gmail.com");
		utilisateur2.setNom("BAUDUIN");
		utilisateur2.setPrenom("Anne");
		utilisateur2.setDateCreation(dateTime.getTime());
		utilisateur2.setPassword(UtilsAuthentication.chiffrerMotdepasse("bauduin", utilisateur2.getDateCreation()));

		Profil profil1 = new Profil();
		profil1.setLibelle("Administrateur");
		profil1.setControleTotal(true);
		Profil profil2 = new Profil();
		profil2.setLibelle("Administrateur technique");
		profil2.setControleTotal(false);
		Profil profil3 = new Profil();
		profil3.setLibelle("Administrateur fonctionnel");
		profil3.setControleTotal(false);
		Profil profil4 = new Profil();
		profil4.setLibelle("Décompteur");
		profil4.setControleTotal(false);
		Profil profil5 = new Profil();
		profil5.setLibelle("Contrôleur");
		profil5.setControleTotal(false);
		Profil profil6 = new Profil();
		profil6.setLibelle("Chargé des finances");
		profil6.setControleTotal(false);

		Role role1 = new Role();
		role1.setCode("ROLE_ADMIN_UTILISATEUR");
		role1.setLibelle("Administrer les utilisateurs");
		Role role2 = new Role();
		role2.setCode("ROLE_ADMIN_PROFIL");
		role2.setLibelle("Administrer les profils");
		Role role3 = new Role();
		role3.setCode("ROLE_ADMIN_GROUPES");
		role3.setLibelle("Administrer les groupes");
		Role role4 = new Role();
		role4.setCode("ROLE_ADMIN_NEWS");
		role4.setLibelle("Administrer les news");
		Role role5 = new Role();
		role5.setCode("ROLE_MODULE_DECOMPTE");
		role5.setLibelle("Décompter");
		Role role6 = new Role();
		role6.setCode("ROLE_MODULE_CONTROLE");
		role6.setLibelle("Contrôler");
		Role role7 = new Role();
		role7.setCode("ROLE_MODULE_FINANCE");
		role7.setLibelle("Gérer les finances");

		profil1.getListeRole().add(role1);
		profil1.getListeRole().add(role2);
		profil1.getListeRole().add(role3);
		profil1.getListeRole().add(role4);
		profil1.getListeRole().add(role5);
		profil1.getListeRole().add(role6);
		profil1.getListeRole().add(role7);

		profil2.getListeRole().add(role1);
		profil2.getListeRole().add(role2);
		profil2.getListeRole().add(role3);
		profil2.getListeRole().add(role4);

		profil3.getListeRole().add(role5);
		profil3.getListeRole().add(role6);
		profil3.getListeRole().add(role7);

		profil4.getListeRole().add(role5);

		profil5.getListeRole().add(role6);

		profil6.getListeRole().add(role7);

		utilisateur1.setProfil(profil1);
		utilisateur2.setProfil(profil2);

		dateTime.set(2015, 1, 4, 12, 30, 25);
		News news1 = new News();
		news1.setTitre("1ère news !");
		news1.setContenu("Une première news, la moins récente :) doit être tout en bas");
		news1.setDateCreation(dateTime.getTime());
		news1.setUtilisateur(utilisateur2);

		dateTime.set(2015, 1, 4, 15, 32, 42);
		News news2 = new News();
		news2.setTitre("Bienvenue :-)");
		news2.setContenu("Bienvenue sur mon application JEE7 !!");
		news2.setDateCreation(dateTime.getTime());
		news2.setUtilisateur(utilisateur1);

		dateTime.set(2015, 1, 04, 16, 18, 23);
		News news3 = new News();
		news3.setTitre("Je t'aime mon amour à moi <3");
		news3.setContenu("Très très très fort !!!!");
		news3.setDateCreation(dateTime.getTime());
		news3.setUtilisateur(utilisateur1);

		dateTime.set(2014, 9, 4, 12, 32, 48);
		Blog blog1 = new Blog();
		blog1.setNom("Recettes réunionnaises");
		blog1.setDescription("Recettes de l'ile de la Réunion (Carrys, rougails, desserts...)");
		blog1.setMotsCles("Recette;Réunion;");
		blog1.setDateCreation(dateTime.getTime());
		blog1.setUtilisateurCreateur(utilisateur2);

		dateTime.set(2014, 11, 6, 22, 14, 54);
		Blog blog2 = new Blog();
		blog2.setNom("Recettes japonaises");
		blog2.setDescription("Recettes du Japon (Sushis, Ramens, Gyozas...)");
		blog2.setMotsCles("Recette;Japon;");
		blog2.setDateCreation(dateTime.getTime());
		blog2.setUtilisateurCreateur(utilisateur2);

		dateTime.set(2014, 9, 5, 7, 22, 6);
		Article article1 = new Article();
		article1.setNom("Carry poulet");
		article1.setDateCreation(dateTime.getTime());
		article1.setMotsCles("Carry;Poulet");
		article1.setContenu("");
		article1.setBlog(blog1);

		dateTime.set(2014, 9, 8, 13, 43, 26);
		Article article2 = new Article();
		article2.setNom("Rougail saucisse");
		article2.setDateCreation(dateTime.getTime());
		article2.setMotsCles("Rougail;Saucisse");
		article2.setContenu("");
		article2.setBlog(blog1);

		dateTime.set(2014, 9, 8, 15, 36, 19);
		Commentaire commentaire1 = new Commentaire();
		commentaire1.setDateCreation(dateTime.getTime());
		commentaire1.setContenu("Hum !! Ca donne faim. Vraiment très réussi");
		commentaire1.setArticle(article1);

		dateTime.set(2014, 9, 8, 18, 21, 36);
		Commentaire commentaire2 = new Commentaire();
		commentaire2.setDateCreation(dateTime.getTime());
		commentaire2.setContenu("Merci beaucoup :-)");
		commentaire2.setArticle(article1);
		commentaire2.setCommentaireParent(commentaire1);

		dateTime.set(2014, 9, 15, 16, 21, 35);
		Commentaire commentaire3 = new Commentaire();
		commentaire3.setDateCreation(dateTime.getTime());
		commentaire3.setContenu("Vivement le prochain plat !!");
		commentaire3.setArticle(article1);

		// PERSISTANCE

		roleFacade.update(role1);
		roleFacade.update(role2);
		roleFacade.update(role3);
		roleFacade.update(role4);
		roleFacade.update(role5);
		roleFacade.update(role6);
		roleFacade.update(role7);

		profilFacade.update(profil1);
		profilFacade.update(profil2);
		profilFacade.update(profil3);
		profilFacade.update(profil4);
		profilFacade.update(profil5);
		profilFacade.update(profil6);

		utilisateurFacade.update(utilisateur1);
		utilisateurFacade.update(utilisateur2);

		newsFacade.update(news1);
		newsFacade.update(news2);
		newsFacade.update(news3);

		blogFacade.update(blog1);
		blogFacade.update(blog2);

		articleFacade.update(article1);
		articleFacade.update(article2);

		commentaireFacade.update(commentaire1);
		commentaireFacade.update(commentaire2);
		commentaireFacade.update(commentaire3);
	}
}
